package com.zhangwoo.analyser.jobs.matcher;

import java.io.StringReader;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.log4j.Logger;

import com.google.gson.Gson;
import com.google.gson.stream.JsonReader;
import com.zhangwoo.analyser.jobs.po.MainComments;
import com.zhangwoo.analyser.jobs.po.SubComments;
import com.zhangwoo.util.Alarm;
import com.zhangwoo.util.BaseDao;
import com.zhangwoo.util.JavaUtil;

@SuppressWarnings({ "rawtypes", "unchecked" })
public class TextMatcherWithKPEO {

	private Logger logger = Logger.getLogger(getClass());

	/**
	 * 针对文本内容进行匹配过程
	 * 
	 * @param strategy
	 *            策略
	 * @param text
	 *            文本内容（单条评价）
	 * @return
	 */
	public void processText(String... strParams) {
		try {
			String strategy = strParams[0];
			String goodTerms = strParams[1];
			String badTerms = strParams[2];
			String otherTerms = strParams[3];
			String text = strParams[4];
			String classn = strParams[5];

			Map<String, String> cProperty = new HashMap<String, String>();
			for (String p : classn.substring(1).split("#")) {
				if(p.trim().length()==0)continue;
				cProperty.put(p.split("~")[0].trim(), p.split("~")[1].trim());
			}

			text = text.replace(",[{", ",\"scoms\":[{")
					.replace("\",{", "\",\"scoms\":[{").replace("\n", "")
					.replace("\t", "").replace("\r", "").replace("/r", "")
					.replace("/n", "");
			logger.debug("text : " + text);

			// 1.策略放在全局变量中
			if (strategy == null || strategy.trim().length() == 0
					|| text == null || text.trim().length() == 0)
				return; // 若没有任何策略内容则返回。
			logger.debug("strategy " + strategy);

			// 好中差全匹配的词预先提取出来
			String tempGoodAll = goodTerms
					.replaceAll("#\\d+\\+[^~]+~[^#]+", "").replace("~", "");
			String tempBadAll = badTerms.replaceAll("#\\d+\\+[^~]+~[^#]+", "")
					.replace("~", "");
			String tempOtherAll = otherTerms.replaceAll("#\\d+\\+[^~]+~[^#]+",
					"").replace("~", "");

			// 2.所有关键词表达式对title进行 直接匹配
			Gson gson = new Gson();
			JsonReader reader = new JsonReader(new StringReader(text));
			reader.setLenient(true);

			MainComments ms = gson.fromJson(reader, MainComments.class);
			// MainComments ms = new Gson().fromJson(text, MainComments.class);
			List<String> exps = new ArrayList<String>();
			Collections.addAll(exps, strategy.split("#"));

			BaseDao dao = new BaseDao();
			String mid = null;

			for (String exp : exps) { // 每项策略
				if (exp.trim().length() == 0)
					continue;

				if (Alarm.isAlerm(("#" + exp).replaceAll("#[^~]+~", ""),
						(ms.getTitle()))) { // 是否命中单个表达式
					// 若title命中策略 (1)所有的评论匹配好差存入词频库 (2)所有的评论插入match库

					logger.debug("term : '" + exp + "' match title : '"
							+ ms.getTitle() + "'");

					String expid = exp.split("~")[0].split("\\+")[0];
					String expclass = exp.split("~")[0].split("\\+")[1]; // 关键词匹配的类别
					String tableMatch = "T_" + expid + "_M_TAB";
					String tableWordFre = "T_" + expid + "_WF_TAB";
					
					String property=cProperty.get(expclass);
					if(property==null||property.trim().isEmpty()) property="";

					List<Object[]> parasValuesWordFre = new ArrayList<Object[]>();
					List<Object[]> parasValuesMatch = new ArrayList<Object[]>();
					for (SubComments sc : ms.getScoms()) {
						List<Object[]> parasValuesWordFre_tmp = new ArrayList<Object[]>();
						mid = md5s(sc.getRateContent() + sc.getRateDate());
						// 评价的唯一标识 mid，使用评价内容+时间

						// (1)

						// 使用class_name过滤评价关键词
						StringBuffer tempGood = new StringBuffer(tempGoodAll);
						StringBuffer tempBad = new StringBuffer(tempBadAll);
						StringBuffer tempOther = new StringBuffer(tempOtherAll);

//						long t1 = System.currentTimeMillis();

						List<String[]> tempTerms = new ArrayList<String[]>();
						tempTerms = JavaUtil.matchAll(goodTerms, "#([^~]+,)*"
								+ expclass + "(,[^~]+)*~([^#]+)");
						for (String[] matchs : tempTerms) {
							tempGood.append("#");
							tempGood.append(matchs[3]);
						}
						tempTerms = JavaUtil.matchAll(badTerms, "#([^~]+,)*"
								+ expclass + "(,[^~]+)*~([^#]+)");
						for (String[] matchs : tempTerms) {
							tempBad.append("#");
							tempBad.append(matchs[3]);
						}
						tempTerms = JavaUtil.matchAll(otherTerms, "#([^~]+,)*"
								+ expclass + "(,[^~]+)*~([^#]+)");
						for (String[] matchs : tempTerms) {
							tempOther.append("#");
							tempOther.append(matchs[3]);
						}

//						long t2 = System.currentTimeMillis();
//						logger.debug("tempTerms done need : " + (t2 - t1));

						Set termsGoodMatch = null;
						Set termsBadMatch = null;
						try {
							
							
							termsGoodMatch = removeShortTerm(allACMatch(
									tempGood.toString().split("#"),
									sc.getRateContent() + sc.getAppendComment()
											+ sc.getContentTitle()));
							termsBadMatch = removeShortTerm(allACMatch(tempBad
									.toString().split("#"),
									sc.getRateContent() + sc.getAppendComment()
											+ sc.getContentTitle()));
							Set termsOtherMatch = removeShortTerm(allACMatch(
									tempOther.toString().split("#"),
									sc.getRateContent() + sc.getAppendComment()
											+ sc.getContentTitle()));
							Set matchers=null;
							for (Object t : termsGoodMatch){
								matchers=allACMatch(property.split("，"),t.toString());
								parasValuesWordFre_tmp.add(new Object[] { mid,
										t, 1, sc.getRateDate(),
										matchers.size()==0?null:matchers.iterator().next()
										});
							}
							for (Object t : termsBadMatch){
								matchers=allACMatch(property.split("，"),t.toString());
								parasValuesWordFre_tmp.add(new Object[] { mid,
										t, 0, sc.getRateDate(),
										matchers.size()==0?null:matchers.iterator().next() });
							}
							for (Object t : termsOtherMatch){
								matchers=allACMatch(property.split("，"),t.toString());
								parasValuesWordFre_tmp.add(new Object[] { mid,
										t, 2, sc.getRateDate(),
										matchers.size()==0?null:matchers.iterator().next() });
							}

							parasValuesWordFre_tmp = removeWordFre(parasValuesWordFre_tmp);
						} catch (Exception e) {
							Logger.getLogger(TextMatcherWithKPEO.class).error(
									"match Word Fre error ! ", e);
						}
						parasValuesWordFre.addAll(parasValuesWordFre_tmp);

//						long t3 = System.currentTimeMillis();
//						logger.debug("parasValuesWordFre done need : "
//								+ (t3 - t2));
						// (2)
						try {
							parasValuesMatch
									.add(new Object[] {
											mid,
											heightLight(
													removeSep(
															("#" + exp)
																	.replaceAll(
																			"#[^~]+~",
																			""))
															.split("\\~\\$\\~"),
													ms.getTitle()),// 标题
											ms.getDomian(),// 域名
											ms.getUrl(),// 地址
											dateToString(stringToDate(ms.getTime())),// 添加时间
//											ms.getTime(),// 添加时间
											sc.getDisplayUserNick(),// 评论人昵称
											heightLight(parasValuesWordFre_tmp,
													sc.getRateContent()),// 评论内容
											sc.getRateDate(),// 评论时间
											heightLight(parasValuesWordFre_tmp,
													sc.getAppendComment()),// 追加评价
											sc.getCons(),// 不足评论内容
											sc.getPros(),// 使用心得
											heightLight(parasValuesWordFre_tmp,
													sc.getContentTitle()),// 评论内容总结标题
											sc.getStarNum(),// 评论星数
											expid,// 关键词ID
											(termsGoodMatch.size() == 0 && termsBadMatch
													.size() == 0) ? 2
													: (termsGoodMatch.size() >= termsBadMatch
															.size() ? 1 : 0) // 维度标志
									// 1好
									// 0差
									// 2其他
									});
						} catch (Exception e) {
							Logger.getLogger(TextMatcherWithKPEO.class).error(
									"match Word error ! ", e);
						}
//						long t4 = System.currentTimeMillis();
//						logger.debug("parasValuesMatch done need : " + (t4 - t3));

					}
					logger.debug("params done!!! ");

					for (Object[] os : parasValuesWordFre) {
						try {
							dao.save(
									"insert "
											+ tableWordFre
											+ " (mid,wordName,dFlag,rateDate,property) "
											+ " values " + "(?,?,?,?,?)", os);

						} catch (Exception e) {
							Logger.getLogger(TextMatcherWithKPEO.class).error(
									"insert tableWordFre " + tableWordFre
											+ " sql error ! ", e);
						}
					}
					logger.debug("tableWordFre done!!! ");
					for (Object[] os : parasValuesMatch) {
						try {
							dao.save(
									"insert "
											+ tableMatch
											+ " (mid,title,domain,url,time,displayUserNick,rateContent,rateDate,appendComment,Cons,Pros,contentTitle,starNum,keyword_id,dFlag) "
											+ " values "
											+ "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
									os);
						} catch (Exception e) {
							Logger.getLogger(TextMatcherWithKPEO.class).error(
									"insert tableMatch " + tableMatch
											+ " sql error ! ", e);
						}
					}
					logger.debug("tableMatch done!!! ");
				}
			}
		} catch (Exception e) {
			Logger.getLogger(TextMatcherWithKPEO.class).error(
					"processText json error ! ", e);
		}

		logger.debug("job done!!! ");
	}

	public static void main(String[] args) {
		// // TODO Auto-generated method stub
		// TextMatcherWithKPE t = new TextMatcherWithKPE();
		// String strategy = "#1~七匹狼";
		// // String
		// //
		// strategy="#a01_20120921135243,7~三星 and i9100#a04_20120908135838,7~七匹狼 and 女装#a04_20120917155109,13~利郎 and 男装#a04_20120920183248,7~七匹狼 and 男装#a01_20120921135243_p_13,7~CPU#a01_20120921135243_p_14,7~内存#a01_20120921135243_p_15,7~操控#a01_20120921135243_p_16,7~功能#a01_20120921135243_p_17,7~操作系统#a01_20120921135243_p_18,7~散热#a01_20120921135243_p_19,7~声音#a01_20120921135243_p_2,7~电池#a01_20120921135243_p_20,7~信号#a01_20120921135243_p_21,7~屏幕#a01_20120921135243_p_22,7~外观#a01_20120921135243_p_23,7~价格#a01_20120921135243_p_24,7~配件#a01_20120921135243_p_25,7~售后维修服务#a01_20120921135243_p_26,7~其它#a01_20120921135243_p_92,7~总体#a04_20120908135838_p_27,7~面料#a04_20120908135838_p_28,7~做工#a04_20120908135838_p_29,7~颜色#a04_20120908135838_p_30,7~款式#a04_20120908135838_p_31,7~尺寸#a04_20120908135838_p_32,7~价格#a04_20120908135838_p_33,7~穿着#a04_20120908135838_p_93,7~质量#a04_20120917155109_p_27,13~面料#a04_20120917155109_p_28,13~做工#a04_20120917155109_p_29,13~颜色#a04_20120917155109_p_30,13~款式#a04_20120917155109_p_31,13~尺寸#a04_20120917155109_p_32,13~价格#a04_20120917155109_p_33,13~穿着#a04_20120917155109_p_93,13~质量#a04_20120920183248_p_27,7~面料#a04_20120920183248_p_28,7~做工#a04_20120920183248_p_29,7~颜色#a04_20120920183248_p_30,7~款式#a04_20120920183248_p_31,7~尺寸#a04_20120920183248_p_32,7~价格#a04_20120920183248_p_33,7~穿着#a04_20120920183248_p_93,7~质量#a01_20120921135243_p_2_e_1,7~耐用 or 续航时间长 or 给力 or 待机时间长 or 强 or 很好 or 很牛 or 牛逼#a01_20120921135243_p_2_e_2,7~一般 or 还可以 or 将就能用 or 普通 or 续航能力一般 or 续航一般 or 马马虎虎 or 还行 or 将就#a01_20120921135243_p_2_e_3,7~不够用 or 容量低 or 耗电快 or 充不上电 or 散热差 or 电池弱 or 发热量大 or 耗电太快 or 电池不耐用 or 电池硬伤#a04_20120908135838_p_27_e_1,7~柔软 or 很柔软 or 非常柔软 or 很软 or 很舒服 or 舒服 or 吸汗 or 质感不错 or 纯棉 or 全棉 or 透气 or 凉爽 or 舒适 or 柔顺 or 很棒 or 给力 or 不错 or 很好 or 滑滑的 or 弹力很大 or 凉快  or 有档次 or 抗皱 or 不会褪色 or 不褪色 or 不掉色 or 手感不错 or 优良材质 or 不变形 or 不会变形 or 丝滑 or 细腻 or 轻薄 or 厚实 or 丝绵一样 or 显高档 or 纯棉的#a04_20120908135838_p_27_e_2,7~一般 or 还可以 or 将就能用 or 普通 or 一般 or 马马虎虎 or 还行 or 将就 or 没有优点 or 有点硬 or 质量不差 or 不差 or 一般般#a04_20120908135838_p_27_e_3,7~or 粗糙 or 太透了 or 磨砂的 or 起球 or 没有弹性 or 皱皱巴巴 or 不是很透气 or 不透气 or 有点闷 or 垂感不够 or 易变型 or 掉色  or 会褪色 or 劣质 or 皱的不成样 or 会沾毛 or 喜欢沾毛 or 超级薄 or 手感很差 or 会变形 or 易变形 or 硬梆梆 or  不好打理 or 味道大 or 味道有点大 or 掉毛#a04_20120908135838_p_28_e_1,7~给力 or 强 or 很好 or 很牛 or 牛逼 or 很棒 or 不错 or 好 or 牛 or 喜欢 or 线条连贯 or 剪裁合体 or 口袋足够大 or 扎实 or 慎密 or 手工不错 or 均匀 or 针线均匀 or 收身收的很好 or 收身很不错 or 收身很好 or 做工没得说 or 细节处理还好 or 细节处理不错 or 做工精 or 没有线头#a04_20120908135838_p_28_e_2,7~一般 or 还可以 or 将就能用 or 普通 or 马马虎虎 or 还行 or 将就 or 可以做的更加 Or 细节处理还好#a04_20120908135838_p_28_e_3,7~差 or 很差 or 很烂 or 烂 or 烂透 or 坑爹 or 粗糙 or 线头很多 or 线头多 or 线头特多 or 拉链太短 or 针脚不太好 or 针脚不好 or 拉链不好 or 袖子有点短 or 口袋太浅 or 口袋浅 or 脱线 or 有点短 or 裂口 or 不扎实 or 纽扣不牢 or 拉链外缝 or 纽扣不太稳固 or 走针稍微差点 or 不平整 or 扣子钉的不稳定 or 不对称 or 线不是很直 or 有缺陷 or 不齐 or 歪的 or 乱七八糟 or 袖口有点大 or 歪了#a04_20120908135838_p_29_e_1,7~漂亮 or 鲜艳 or 喜欢 or 纯 or 很纯 or 给力 or 强 or 很好 or 很牛 or 牛逼 or 很棒 or 不错 or 很衬肤色 or 流行色 or 挺正的 or 赞 or 没色差 or 特别亮 or 靓 or 淡雅 or 超正 or 很美 or 很梦幻 or 好看 or 经典 or 清爽 or 素雅 or 特别 or 干净 or 稳重 Or 大胆 or 热情 or 温暖 or 有光泽#a04_20120908135838_p_29_e_2,7~一般 or 还可以 or 将就 or 普通 or 马马虎虎 or 还行 or 稍深一些 or 不张扬 or 比较浅 or 太正统#a04_20120908135838_p_29_e_3,7~不纯 or 不是很纯 or 太淡 or 太浓 or 太乱 or 太花 or 不够鲜艳 or 很差 or 很烂 or 烂 or 烂透 or 坑爹 or 旧旧的 or 太暗 or 不正 or 单一 or 色差大 or 色差挺大 or 色差很大 or 老气 or 有点暗 or 灰暗 or 不亮 or 太艳丽 or 显脏 or 不禁脏#a04_20120908135838_p_30_e_1,7~大气 or 挺好看 or 好看 or 霸气 or 时尚 or 大方 or 潮流 or 给力 or 强 or 很好 or 很牛 or 牛逼 or 很棒 or 不错 or 喜欢 or 职业 or 韩范 or 淑女 or 斯文 or 端庄 or 适合外出 or 知性美 or 炫目 or 奢华 or 简洁 or 新颖 or 潮 or 酷 or 干练 or 好搭配 or 小性感 or 出众 or 别致 or 大热的 or 英伦范 or 英伦风 or 靓 or 有特色 or 版型好 or 版型挺好 or 版型极好 or 高雅 or 显档次 or 高档 or 清新 or 优雅 or 雅致 or 休闲 or 可爱#a04_20120908135838_p_30_e_2,7~一般 or 还可以 or 将就能用 or 普通 or 能力一般 or 一般 or 马马虎虎 or 还行 or 将就 or 大众 or 不算太老气 or 凑合 or 学院派 or 民族风 or 中规中矩#a04_20120908135838_p_30_e_3,7~不上档次 or 老气 or 老土 or 太土 or 土 or 土到掉渣 or 很差 or 不耐用 or 硬伤 or 很烂 or 烂 or 烂透 or 坑爹 or 不怎么好看 or 单调 or 乡土 or 难看 or 丑 or 幼稚 or 旧 or 过时#a04_20120908135838_p_31_e_1,7~标准 or 合适 or 规范 or 挺正 or 给力 or 强 or 很好 or 很牛 or 牛逼 or 很棒 or 不错 or 修身 or 合理 or 合身 or 不紧绷 or 码很正 or 刚好#a04_20120908135838_p_31_e_2,7~一般 or 还可以 or 将就能用 or 普通 or 能力一般 or 一般 or 马马虎虎 or 还行 or 将就#a04_20120908135838_p_31_e_3,7~有些紧身 or 紧身 or 有点小 or 偏小 or 有点紧 or 紧 or 混乱 or 很差 or 很弱 or 硬伤 or 很烂 or 烂 or 烂透 or 坑爹 or 有点肥 or 紧绷 or 小一号 or 大一号 or 不对 or 不标准 or 不能穿 or 根本不能穿 or 大了 or 肥大 or 不合身 or 有点小 or 不合适 or 不适合 or 偏短 or 贼大 or 显大 or 太宽 or 空荡荡的 or 偏长 or 窄 or 扣不上#a04_20120908135838_p_32_e_1,7~很便宜 or 便宜 or 实惠 or 价廉 or 划算 or 公道 or 给力 or 不错 or 超值 or 物有所值 or 性价比很高 or 性价比高 or 优惠 or 折扣力度大 or 打折力度大 or 很值 or 价位低 or 价位合适 or 价格合适#a04_20120908135838_p_32_e_2,7~适中 or 一般 or 还可以 or 普通 or 一般 or 马马虎虎 or 还行 or 将就 or 折扣有点少 or 折扣有点小#a04_20120908135838_p_32_e_3,7~有点贵 or 小贵 or 太贵 or 贵 or 很烂 or 烂 or 烂透 or 坑爹 or 偏贵 or 对不起这价格#a04_20120908135838_p_33_e_1,7~舒服 or 舒适 or 给力 or 强 or 很好 or 很牛 or 牛逼 or 很棒 or 不错 or 漂亮 or 好看 or 很好看 or 凉快 or 甜美 or 显气质 or 显瘦 or 年轻 or 上身效果不错 or 上身效果好 or 帅气 or 显身材 or 自在 or 修身 or 清爽 or 文艺范 or 层次感 or 潇洒 or 自信 or 风情万种 or 成熟内敛#a04_20120908135838_p_33_e_2,7~一般 or 还可以 or 普通 or 一般 or 马马虎虎 or 还行 or 将就#a04_20120908135838_p_33_e_3,7~硬伤 or 很烂 or 烂 or 烂透 or 坑爹 or 不舒服 or 不舒适 or 上身效果差 or 显胖 or 宽松#a04_20120908135838_p_93_e_1,7~手感挺好 or 质量好 or 上乘 or 弹力很好 or 弹力好 or 透气好 or 不掉色 or 耐用 or 给力 or 强 or 很好 or 很牛 or 牛逼 or 很棒 or 不错 #a04_20120908135838_p_93_e_2,7~一般 or 还可以 or 将就能用 or 普通 or 能力一般 or 一般 or 马马虎虎 or 还行 or 将就#a04_20120908135838_p_93_e_3,7~有点薄 or 薄 or 很薄 or 单薄 or 太单薄 or 厚 or 不好 or 皱褶 or 变形 or 掉色 or  很差 or 很弱 or 不耐用 or 硬伤 or 很烂 or 烂 or 烂透 or 坑爹#a04_20120917155109_p_27_e_1,13~柔软 or 很柔软 or 非常柔软 or 很软 or 很舒服 or 舒服 or 吸汗 or 质感不错 or 纯棉 or 全棉 or 透气 or 凉爽 or 舒适 or 柔顺 or 很棒 or 给力 or 不错 or 很好 or 滑滑的 or 弹力很大 or 凉快  or 有档次 or 抗皱 or 不会褪色 or 不褪色 or 不掉色 or 手感不错 or 优良材质 or 不变形 or 不会变形 or 丝滑 or 细腻 or 轻薄 or 厚实 or 丝绵一样 or 显高档 or 纯棉的#a04_20120917155109_p_27_e_2,13~一般 or 还可以 or 将就能用 or 普通 or 一般 or 马马虎虎 or 还行 or 将就 or 没有优点 or 有点硬 or 质量不差 or 不差 or 一般般#a04_20120917155109_p_27_e_3,13~or 粗糙 or 太透了 or 磨砂的 or 起球 or 没有弹性 or 皱皱巴巴 or 不是很透气 or 不透气 or 有点闷 or 垂感不够 or 易变型 or 掉色  or 会褪色 or 劣质 or 皱的不成样 or 会沾毛 or 喜欢沾毛 or 超级薄 or 手感很差 or 会变形 or 易变形 or 硬梆梆 or  不好打理 or 味道大 or 味道有点大 or 掉毛#a04_20120917155109_p_28_e_1,13~给力 or 强 or 很好 or 很牛 or 牛逼 or 很棒 or 不错 or 好 or 牛 or 喜欢 or 线条连贯 or 剪裁合体 or 口袋足够大 or 扎实 or 慎密 or 手工不错 or 均匀 or 针线均匀 or 收身收的很好 or 收身很不错 or 收身很好 or 做工没得说 or 细节处理还好 or 细节处理不错 or 做工精 or 没有线头#a04_20120917155109_p_28_e_2,13~一般 or 还可以 or 将就能用 or 普通 or 马马虎虎 or 还行 or 将就 or 可以做的更加 Or 细节处理还好#a04_20120917155109_p_28_e_3,13~差 or 很差 or 很烂 or 烂 or 烂透 or 坑爹 or 粗糙 or 线头很多 or 线头多 or 线头特多 or 拉链太短 or 针脚不太好 or 针脚不好 or 拉链不好 or 袖子有点短 or 口袋太浅 or 口袋浅 or 脱线 or 有点短 or 裂口 or 不扎实 or 纽扣不牢 or 拉链外缝 or 纽扣不太稳固 or 走针稍微差点 or 不平整 or 扣子钉的不稳定 or 不对称 or 线不是很直 or 有缺陷 or 不齐 or 歪的 or 乱七八糟 or 袖口有点大 or 歪了#a04_20120917155109_p_29_e_1,13~漂亮 or 鲜艳 or 喜欢 or 纯 or 很纯 or 给力 or 强 or 很好 or 很牛 or 牛逼 or 很棒 or 不错 or 很衬肤色 or 流行色 or 挺正的 or 赞 or 没色差 or 特别亮 or 靓 or 淡雅 or 超正 or 很美 or 很梦幻 or 好看 or 经典 or 清爽 or 素雅 or 特别 or 干净 or 稳重 Or 大胆 or 热情 or 温暖 or 有光泽#a04_20120917155109_p_29_e_2,13~一般 or 还可以 or 将就 or 普通 or 马马虎虎 or 还行 or 稍深一些 or 不张扬 or 比较浅 or 太正统#a04_20120917155109_p_29_e_3,13~不纯 or 不是很纯 or 太淡 or 太浓 or 太乱 or 太花 or 不够鲜艳 or 很差 or 很烂 or 烂 or 烂透 or 坑爹 or 旧旧的 or 太暗 or 不正 or 单一 or 色差大 or 色差挺大 or 色差很大 or 老气 or 有点暗 or 灰暗 or 不亮 or 太艳丽 or 显脏 or 不禁脏#a04_20120917155109_p_30_e_1,13~大气 or 挺好看 or 好看 or 霸气 or 时尚 or 大方 or 潮流 or 给力 or 强 or 很好 or 很牛 or 牛逼 or 很棒 or 不错 or 喜欢 or 职业 or 韩范 or 淑女 or 斯文 or 端庄 or 适合外出 or 知性美 or 炫目 or 奢华 or 简洁 or 新颖 or 潮 or 酷 or 干练 or 好搭配 or 小性感 or 出众 or 别致 or 大热的 or 英伦范 or 英伦风 or 靓 or 有特色 or 版型好 or 版型挺好 or 版型极好 or 高雅 or 显档次 or 高档 or 清新 or 优雅 or 雅致 or 休闲 or 可爱#a04_20120917155109_p_30_e_2,13~一般 or 还可以 or 将就能用 or 普通 or 能力一般 or 一般 or 马马虎虎 or 还行 or 将就 or 大众 or 不算太老气 or 凑合 or 学院派 or 民族风 or 中规中矩#a04_20120917155109_p_30_e_3,13~不上档次 or 老气 or 老土 or 太土 or 土 or 土到掉渣 or 很差 or 不耐用 or 硬伤 or 很烂 or 烂 or 烂透 or 坑爹 or 不怎么好看 or 单调 or 乡土 or 难看 or 丑 or 幼稚 or 旧 or 过时#a04_20120917155109_p_31_e_1,13~标准 or 合适 or 规范 or 挺正 or 给力 or 强 or 很好 or 很牛 or 牛逼 or 很棒 or 不错 or 修身 or 合理 or 合身 or 不紧绷 or 码很正 or 刚好#a04_20120917155109_p_31_e_2,13~一般 or 还可以 or 将就能用 or 普通 or 能力一般 or 一般 or 马马虎虎 or 还行 or 将就#a04_20120917155109_p_31_e_3,13~有些紧身 or 紧身 or 有点小 or 偏小 or 有点紧 or 紧 or 混乱 or 很差 or 很弱 or 硬伤 or 很烂 or 烂 or 烂透 or 坑爹 or 有点肥 or 紧绷 or 小一号 or 大一号 or 不对 or 不标准 or 不能穿 or 根本不能穿 or 大了 or 肥大 or 不合身 or 有点小 or 不合适 or 不适合 or 偏短 or 贼大 or 显大 or 太宽 or 空荡荡的 or 偏长 or 窄 or 扣不上#a04_20120917155109_p_32_e_1,13~很便宜 or 便宜 or 实惠 or 价廉 or 划算 or 公道 or 给力 or 不错 or 超值 or 物有所值 or 性价比很高 or 性价比高 or 优惠 or 折扣力度大 or 打折力度大 or 很值 or 价位低 or 价位合适 or 价格合适#a04_20120917155109_p_32_e_2,13~适中 or 一般 or 还可以 or 普通 or 一般 or 马马虎虎 or 还行 or 将就 or 折扣有点少 or 折扣有点小#a04_20120917155109_p_32_e_3,13~有点贵 or 小贵 or 太贵 or 贵 or 很烂 or 烂 or 烂透 or 坑爹 or 偏贵 or 对不起这价格#a04_20120917155109_p_33_e_1,13~舒服 or 舒适 or 给力 or 强 or 很好 or 很牛 or 牛逼 or 很棒 or 不错 or 漂亮 or 好看 or 很好看 or 凉快 or 甜美 or 显气质 or 显瘦 or 年轻 or 上身效果不错 or 上身效果好 or 帅气 or 显身材 or 自在 or 修身 or 清爽 or 文艺范 or 层次感 or 潇洒 or 自信 or 风情万种 or 成熟内敛#a04_20120917155109_p_33_e_2,13~一般 or 还可以 or 普通 or 一般 or 马马虎虎 or 还行 or 将就#a04_20120917155109_p_33_e_3,13~硬伤 or 很烂 or 烂 or 烂透 or 坑爹 or 不舒服 or 不舒适 or 上身效果差 or 显胖 or 宽松#a04_20120917155109_p_93_e_1,13~手感挺好 or 质量好 or 上乘 or 弹力很好 or 弹力好 or 透气好 or 不掉色 or 耐用 or 给力 or 强 or 很好 or 很牛 or 牛逼 or 很棒 or 不错 #a04_20120917155109_p_93_e_2,13~一般 or 还可以 or 将就能用 or 普通 or 能力一般 or 一般 or 马马虎虎 or 还行 or 将就#a04_20120917155109_p_93_e_3,13~有点薄 or 薄 or 很薄 or 单薄 or 太单薄 or 厚 or 不好 or 皱褶 or 变形 or 掉色 or  很差 or 很弱 or 不耐用 or 硬伤 or 很烂 or 烂 or 烂透 or 坑爹#a04_20120920183248_p_27_e_1,7~柔软 or 很柔软 or 非常柔软 or 很软 or 很舒服 or 舒服 or 吸汗 or 质感不错 or 纯棉 or 全棉 or 透气 or 凉爽 or 舒适 or 柔顺 or 很棒 or 给力 or 不错 or 很好 or 滑滑的 or 弹力很大 or 凉快  or 有档次 or 抗皱 or 不会褪色 or 不褪色 or 不掉色 or 手感不错 or 优良材质 or 不变形 or 不会变形 or 丝滑 or 细腻 or 轻薄 or 厚实 or 丝绵一样 or 显高档 or 纯棉的#a04_20120920183248_p_27_e_2,7~一般 or 还可以 or 将就能用 or 普通 or 一般 or 马马虎虎 or 还行 or 将就 or 没有优点 or 有点硬 or 质量不差 or 不差 or 一般般#a04_20120920183248_p_27_e_3,7~or 粗糙 or 太透了 or 磨砂的 or 起球 or 没有弹性 or 皱皱巴巴 or 不是很透气 or 不透气 or 有点闷 or 垂感不够 or 易变型 or 掉色  or 会褪色 or 劣质 or 皱的不成样 or 会沾毛 or 喜欢沾毛 or 超级薄 or 手感很差 or 会变形 or 易变形 or 硬梆梆 or  不好打理 or 味道大 or 味道有点大 or 掉毛#a04_20120920183248_p_28_e_1,7~给力 or 强 or 很好 or 很牛 or 牛逼 or 很棒 or 不错 or 好 or 牛 or 喜欢 or 线条连贯 or 剪裁合体 or 口袋足够大 or 扎实 or 慎密 or 手工不错 or 均匀 or 针线均匀 or 收身收的很好 or 收身很不错 or 收身很好 or 做工没得说 or 细节处理还好 or 细节处理不错 or 做工精 or 没有线头#a04_20120920183248_p_28_e_2,7~一般 or 还可以 or 将就能用 or 普通 or 马马虎虎 or 还行 or 将就 or 可以做的更加 Or 细节处理还好#a04_20120920183248_p_28_e_3,7~差 or 很差 or 很烂 or 烂 or 烂透 or 坑爹 or 粗糙 or 线头很多 or 线头多 or 线头特多 or 拉链太短 or 针脚不太好 or 针脚不好 or 拉链不好 or 袖子有点短 or 口袋太浅 or 口袋浅 or 脱线 or 有点短 or 裂口 or 不扎实 or 纽扣不牢 or 拉链外缝 or 纽扣不太稳固 or 走针稍微差点 or 不平整 or 扣子钉的不稳定 or 不对称 or 线不是很直 or 有缺陷 or 不齐 or 歪的 or 乱七八糟 or 袖口有点大 or 歪了#a04_20120920183248_p_29_e_1,7~漂亮 or 鲜艳 or 喜欢 or 纯 or 很纯 or 给力 or 强 or 很好 or 很牛 or 牛逼 or 很棒 or 不错 or 很衬肤色 or 流行色 or 挺正的 or 赞 or 没色差 or 特别亮 or 靓 or 淡雅 or 超正 or 很美 or 很梦幻 or 好看 or 经典 or 清爽 or 素雅 or 特别 or 干净 or 稳重 Or 大胆 or 热情 or 温暖 or 有光泽#a04_20120920183248_p_29_e_2,7~一般 or 还可以 or 将就 or 普通 or 马马虎虎 or 还行 or 稍深一些 or 不张扬 or 比较浅 or 太正统#a04_20120920183248_p_29_e_3,7~不纯 or 不是很纯 or 太淡 or 太浓 or 太乱 or 太花 or 不够鲜艳 or 很差 or 很烂 or 烂 or 烂透 or 坑爹 or 旧旧的 or 太暗 or 不正 or 单一 or 色差大 or 色差挺大 or 色差很大 or 老气 or 有点暗 or 灰暗 or 不亮 or 太艳丽 or 显脏 or 不禁脏#a04_20120920183248_p_30_e_1,7~大气 or 挺好看 or 好看 or 霸气 or 时尚 or 大方 or 潮流 or 给力 or 强 or 很好 or 很牛 or 牛逼 or 很棒 or 不错 or 喜欢 or 职业 or 韩范 or 淑女 or 斯文 or 端庄 or 适合外出 or 知性美 or 炫目 or 奢华 or 简洁 or 新颖 or 潮 or 酷 or 干练 or 好搭配 or 小性感 or 出众 or 别致 or 大热的 or 英伦范 or 英伦风 or 靓 or 有特色 or 版型好 or 版型挺好 or 版型极好 or 高雅 or 显档次 or 高档 or 清新 or 优雅 or 雅致 or 休闲 or 可爱#a04_20120920183248_p_30_e_2,7~一般 or 还可以 or 将就能用 or 普通 or 能力一般 or 一般 or 马马虎虎 or 还行 or 将就 or 大众 or 不算太老气 or 凑合 or 学院派 or 民族风 or 中规中矩#a04_20120920183248_p_30_e_3,7~不上档次 or 老气 or 老土 or 太土 or 土 or 土到掉渣 or 很差 or 不耐用 or 硬伤 or 很烂 or 烂 or 烂透 or 坑爹 or 不怎么好看 or 单调 or 乡土 or 难看 or 丑 or 幼稚 or 旧 or 过时#a04_20120920183248_p_31_e_1,7~标准 or 合适 or 规范 or 挺正 or 给力 or 强 or 很好 or 很牛 or 牛逼 or 很棒 or 不错 or 修身 or 合理 or 合身 or 不紧绷 or 码很正 or 刚好#a04_20120920183248_p_31_e_2,7~一般 or 还可以 or 将就能用 or 普通 or 能力一般 or 一般 or 马马虎虎 or 还行 or 将就#a04_20120920183248_p_31_e_3,7~有些紧身 or 紧身 or 有点小 or 偏小 or 有点紧 or 紧 or 混乱 or 很差 or 很弱 or 硬伤 or 很烂 or 烂 or 烂透 or 坑爹 or 有点肥 or 紧绷 or 小一号 or 大一号 or 不对 or 不标准 or 不能穿 or 根本不能穿 or 大了 or 肥大 or 不合身 or 有点小 or 不合适 or 不适合 or 偏短 or 贼大 or 显大 or 太宽 or 空荡荡的 or 偏长 or 窄 or 扣不上#a04_20120920183248_p_32_e_1,7~很便宜 or 便宜 or 实惠 or 价廉 or 划算 or 公道 or 给力 or 不错 or 超值 or 物有所值 or 性价比很高 or 性价比高 or 优惠 or 折扣力度大 or 打折力度大 or 很值 or 价位低 or 价位合适 or 价格合适#a04_20120920183248_p_32_e_2,7~适中 or 一般 or 还可以 or 普通 or 一般 or 马马虎虎 or 还行 or 将就 or 折扣有点少 or 折扣有点小#a04_20120920183248_p_32_e_3,7~有点贵 or 小贵 or 太贵 or 贵 or 很烂 or 烂 or 烂透 or 坑爹 or 偏贵 or 对不起这价格#a04_20120920183248_p_33_e_1,7~舒服 or 舒适 or 给力 or 强 or 很好 or 很牛 or 牛逼 or 很棒 or 不错 or 漂亮 or 好看 or 很好看 or 凉快 or 甜美 or 显气质 or 显瘦 or 年轻 or 上身效果不错 or 上身效果好 or 帅气 or 显身材 or 自在 or 修身 or 清爽 or 文艺范 or 层次感 or 潇洒 or 自信 or 风情万种 or 成熟内敛#a04_20120920183248_p_33_e_2,7~一般 or 还可以 or 普通 or 一般 or 马马虎虎 or 还行 or 将就#a04_20120920183248_p_33_e_3,7~硬伤 or 很烂 or 烂 or 烂透 or 坑爹 or 不舒服 or 不舒适 or 上身效果差 or 显胖 or 宽松#a04_20120920183248_p_93_e_1,7~手感挺好 or 质量好 or 上乘 or 弹力很好 or 弹力好 or 透气好 or 不掉色 or 耐用 or 给力 or 强 or 很好 or 很牛 or 牛逼 or 很棒 or 不错 #a04_20120920183248_p_93_e_2,7~一般 or 还可以 or 将就能用 or 普通 or 能力一般 or 一般 or 马马虎虎 or 还行 or 将就#a04_20120920183248_p_93_e_3,7~有点薄 or 薄 or 很薄 or 单薄 or 太单薄 or 厚 or 不好 or 皱褶 or 变形 or 掉色 or  很差 or 很弱 or 不耐用 or 硬伤 or 很烂 or 烂 or 烂透 or 坑爹";
		// String text =
		// "{\"title\":\"《七匹狼》杂志 订阅3期/3个月 9.5折 （9日开始发货）-tmall.com天猫\",\"domian\":\"detail.tmall.com\",\"url\":\"detail.tmall.com/item.htm?id=7448158671\",\"time\":\"20130122062905\",[{\"appendComment\":\"\",\"displayUserNick\":\"泯灭的天宇\",\"rateContent\":\"发货挺快的！\",\"contentTitle\":\"\",\"Cons\":\"\",\"Pros\":\"\",\"starNum\":\"\",\"rateDate\":\"2012-04-02 21:03:46\"},{\"appendComment\":\"\",\"displayUserNick\":\"eeee45\",\"rateContent\":\"还没看，等追加。。\",\"contentTitle\":\"\",\"Cons\":\"\",\"Pros\":\"\",\"starNum\":\"\",\"rateDate\":\"2012-03-30 18:10:42\"},{\"appendComment\":\"\",\"displayUserNick\":\"eeee45\",\"rateContent\":\"今天刚拿到货，还没看，总体来说应该是不错的，先来好评下，等追加。。\",\"contentTitle\":\"\",\"Cons\":\"\",\"Pros\":\"\",\"starNum\":\"\",\"rateDate\":\"2012-03-30 18:09:28\"},{\"appendComment\":\"\",\"displayUserNick\":\"n***8\",\"rateContent\":\"毛领好大啊，真的很好看，好喜欢，同事看了都要买，都给她们发了链接，刚刚又买了一件。亲记得下次要优惠哦。有点小问题，少了一个毛毛的扣子，自己搞好了，下次要细心哦，还是给5分啦。\",\"contentTitle\":\"\",\"Cons\":\"\",\"Pros\":\"\",\"starNum\":\"\",\"rateDate\":\"2013-01-15 20:58:18\"},{\"appendComment\":\"\",\"displayUserNick\":\"w***4\",\"rateContent\":\"态度不好物流业很慢\",\"contentTitle\":\"\",\"Cons\":\"\",\"Pros\":\"\",\"starNum\":\"\",\"rateDate\":\"2013-01-15 20:54:41\"},{\"appendComment\":\"\",\"displayUserNick\":\"haoxuan89757\",\"rateContent\":\"衣服还好 就是掉毛厉害 挺修身的\",\"contentTitle\":\"\",\"Cons\":\"\",\"Pros\":\"\",\"starNum\":\"\",\"rateDate\":\"2013-01-15 20:53:43\"},{\"appendComment\":\"\",\"displayUserNick\":\"8***a\",\"rateContent\":\"宝贝很满意！以后还会来\",\"contentTitle\":\"\",\"Cons\":\"\",\"Pros\":\"\",\"starNum\":\"\",\"rateDate\":\"2013-01-15 20:51:56\"},{\"appendComment\":\"\",\"displayUserNick\":\"开心果_4485\",\"rateContent\":\"衣衣款式很喜欢，非常满意，无论是包装和发货速度都比想像中好，以后会经常转转的。\",\"contentTitle\":\"\",\"Cons\":\"\",\"Pros\":\"\",\"starNum\":\"\",\"rateDate\":\"2013-01-15 20:50:27\"},{\"appendComment\":\"\",\"displayUserNick\":\"z***1\",\"rateContent\":\"朋友买的。听说穿的不错。很满意\",\"contentTitle\":\"\",\"Cons\":\"\",\"Pros\":\"\",\"starNum\":\"\",\"rateDate\":\"2013-01-15 20:49:47\"}]}";
		//
		// t.processText(strategy, "好看#满意", "", text);
		//
		 String all = JavaUtil.readFile("d:\\TestZone\\my.txt");
		 String[] alll = all.split("\n");
		 for (String s : alll)
		 new TextMatcherWithKPEO().processText(
		 JavaUtil.readFile("d:\\TestZone\\strategy.txt"),
		 JavaUtil.readFile("d:\\TestZone\\good.txt"),
		 JavaUtil.readFile("d:\\TestZone\\bad.txt"),
		 JavaUtil.readFile("d:\\TestZone\\other.txt"), s,
		 JavaUtil.readFile("d:\\TestZone\\class.txt"));
		// String x=JavaUtil.readFile("d:\\TestZone\\strategy.txt");
		// new Gson().fromJson(x, MainComments.class);
//		 System.out.println(stringToDate("2013/03/23 14:52:12"));
//		System.out.println(dateToString(stringToDate("2013-01-31 04:22:40")));
		// DateFormat.getDateTimeInstance().parse("2013/03/23 14:52:12");
	}

	// private Set allACMatch(String[] terms, String text) {
	// AhoCorasick tree = new AhoCorasick();
	// for (int i = 0; i < terms.length; i++) {
	// if (terms[i].trim().length() != 0)
	// tree.add(terms[i].trim().getBytes(), terms[i].trim());
	// }
	// tree.prepare();
	//
	// Set termsThatHit = new HashSet();
	// for (Iterator iter = tree.search(text.getBytes()); iter.hasNext();) {
	// SearchResult result = (SearchResult) iter.next();
	// termsThatHit.addAll(result.getOutputs());
	// }
	//
	// return termsThatHit;
	// }
	/**
	 * 字符串转换为java.util.Date<br>
	 * 支持格式为 yyyy.MM.dd G 'at' hh:mm:ss z 如 '2002-1-1 AD at 22:10:59 PSD'<br>
	 * yy/MM/dd HH:mm:ss 如 '2002/1/1 17:55:00'<br>
	 * yy/MM/dd HH:mm:ss pm 如 '2002/1/1 17:55:00 pm'<br>
	 * yy-MM-dd HH:mm:ss 如 '2002-1-1 17:55:00' <br>
	 * yy-MM-dd HH:mm:ss am 如 '2002-1-1 17:55:00 am' <br>
	 * 
	 * @param time
	 *            String 字符串<br>
	 * @return Date 日期<br>
	 */
	public static Date stringToDate(String time) {
		SimpleDateFormat formatter;
		int tempPos = time.indexOf("AD");
		time = time.trim();
		formatter = new SimpleDateFormat("yyyy.MM.dd G 'at' hh:mm:ss z");
		if (tempPos > -1) {
			time = time.substring(0, tempPos) + "公元"
					+ time.substring(tempPos + "AD".length());// china
			formatter = new SimpleDateFormat("yyyy.MM.dd G 'at' hh:mm:ss z");
		}
		tempPos = time.indexOf("-");
		if (tempPos > -1 && (time.indexOf(" ") < 0)) {
			formatter = new SimpleDateFormat("yyyyMMddHHmmssZ");
		} else if (time.matches("\\d{14}")) {
			formatter = new SimpleDateFormat("yyyyMMddHHmmss");
		} else if ((time.indexOf("/") > -1) && (time.indexOf(" ") > -1)) {
			formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
		} else if ((time.indexOf("-") > -1) && (time.indexOf(" ") > -1)) {
			formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		} else if ((time.indexOf("/") > -1) && (time.indexOf("am") > -1)
				|| (time.indexOf("pm") > -1)) {
			formatter = new SimpleDateFormat("yyyy-MM-dd KK:mm:ss a");
		} else if ((time.indexOf("-") > -1) && (time.indexOf("am") > -1)
				|| (time.indexOf("pm") > -1)) {
			formatter = new SimpleDateFormat("yyyy-MM-dd KK:mm:ss a");
		}
		ParsePosition pos = new ParsePosition(0);
		java.util.Date ctime = formatter.parse(time, pos);

		return ctime;
	}
	public static String dateToString(Date time){ 
	    SimpleDateFormat formatter; 
	    formatter = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss"); 
	    String ctime = formatter.format(time); 

	    return ctime; 
	} 

	private Set allACMatch(String[] terms, String text) {
		Set termsThatHit = new HashSet();
		for (String term : terms) {
			if (text.indexOf(term) != -1) {
				termsThatHit.add(term);
			}
		}

		return termsThatHit;
	}

	private String heightLight(List<Object[]> parasValuesWordFres,
			String origStr) {
		if (origStr == null || origStr.trim().length() == 0)
			return origStr;
		// 好：#04D215 差：#FF0F00 其他：#FF9E01
		String color = "#FF9E01";
		for (Object[] parasValuesWordFre : parasValuesWordFres) {
			if (parasValuesWordFre[1].toString() != null
					&& String.valueOf(parasValuesWordFre[1].toString()).trim()
							.length() > 0) {
				if (parasValuesWordFre[2].toString().equals("1")) {
					color = "#04D215";
				} else if (parasValuesWordFre[2].toString().equals("0")) {
					color = "#FF0F00";
				} else if (parasValuesWordFre[2].toString().equals("2")) {
					color = "#FF9E01";
				}

				origStr = origStr.replace(
						String.valueOf(parasValuesWordFre[1].toString()),
						"<font color=\"" + color + "\">"
								+ parasValuesWordFre[1].toString() + "</font>");
			}
		}
		return origStr;
	}

	private String heightLight(Object[] objects, String origStr) {
		if (origStr == null || origStr.trim().length() == 0)
			return origStr;

		for (Object key : objects) {
			if (key != null && String.valueOf(key).trim().length() > 0)
				origStr = origStr.replace(String.valueOf(key),
						"<font color=\"#0000FF\">" + key + "</font>");
		}
		return origStr;
	}

	private String removeSep(String orgStr) {
		return orgStr.replaceAll("#[^~]+~", "\\~\\$\\~")
				.replaceAll("\\s+", " ").replace(" and ", "~$~")
				.replace(" or ", "~$~").replace(" not ", "~$~")
				.replace("#", "~$~").replace("(", "~$~").replace(")", "~$~")
				.replace(",", "~$~");
	}

	private List<Object[]> removeWordFre(List<Object[]> parasValuesWordFre_tmp) {
		List<Object[]> parasValuesWordFre_res = new ArrayList<Object[]>();

		StringBuffer allMatchStr = new StringBuffer();

		for (Object[] term : parasValuesWordFre_tmp) {
			allMatchStr.append(term[1].toString());
			allMatchStr.append(";");
		}

		for (Object[] term : parasValuesWordFre_tmp) {
			if (JavaUtil.matchAll(allMatchStr.toString(), term[1].toString())
					.size() == 1) {
				parasValuesWordFre_res.add(term);
			}
		}
		return parasValuesWordFre_res;
	}

	private Set removeShortTerm(Set originTerm) {
		Set termsAllMatchResult = new HashSet();

		StringBuffer allMatchStr = new StringBuffer();

		for (Object term : originTerm) {
			allMatchStr.append(term.toString());
			allMatchStr.append(";");
		}

		for (Object term : originTerm) {
			if (JavaUtil.matchAll(allMatchStr.toString(), term.toString())
					.size() == 1) {
				termsAllMatchResult.add(term);
			}
		}

		return termsAllMatchResult;
	}

	public String md5s(String plainText) {
		try {
			MessageDigest md = MessageDigest.getInstance("MD5");
			md.update(plainText.getBytes());
			byte b[] = md.digest();

			int i;

			StringBuffer buf = new StringBuffer("");
			for (int offset = 0; offset < b.length; offset++) {
				i = b[offset];
				if (i < 0)
					i += 256;
				if (i < 16)
					buf.append("0");
				buf.append(Integer.toHexString(i));
			}
			return buf.toString();
		} catch (NoSuchAlgorithmException e) {
			Logger.getLogger(TextMatcherWithKPEO.class)
					.error("md5 error ! ", e);

		}
		return null;
	}

}
